package com.tom.jmgd.entity.param.dz;


import com.tom.jmgd.common.DzApplicationCommon;
import com.tom.jmgd.util.EncryptionUtils;
import lombok.Data;

import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;

@Data
public class BaseDTO {

    /**
     * B2B应用授权appId，由B2B分配给接入系统的唯一凭证
     */
    private String appId;

    /**
     * 接口名称，不同业务对接传递不同的值，例如：厂家创建订单接口传递“m_create_order”
     */
    private String method;

    /**
     * 请求时间，格式为：Unix标准时间戳，精确到毫秒
     */
    private String timestamp;

    /**
     * 签名算法类型：固定为 HMAC-SHA256，目前仅支持该方式，传递其他数值均按“ HMAC-SHA256”处理
     */
    private String signType;

    /**
     * 业务参数请求,Json字符串格式
     */
    private String content;

    /**
     * 请求参数content的签名值
     */
    private String sign;

    public static BaseDTO createBaseDTO(String content, String method) throws Exception{
        // 获取当前时间
        LocalDateTime now = LocalDateTime.now();

        // 当前时间减去一分钟
        LocalDateTime oneMinuteAgo = now.minusMinutes(1);

        // 将减去一分钟后的时间转换为时间戳
        ZonedDateTime zonedDateTime = oneMinuteAgo.atZone(ZoneId.systemDefault());
        Instant instant = zonedDateTime.toInstant();
        long timestamp1 = instant.toEpochMilli();

        BaseDTO baseDTO = new BaseDTO();
        baseDTO.setAppId(DzApplicationCommon.APPID);
        baseDTO.setMethod(method);
        baseDTO.setSignType("HMAC-SHA256");
        baseDTO.setContent(content);
        //String timestamp = String.valueOf(System.currentTimeMillis());
        //LocalDateTime.of(2023, 6, 25, 10, 15, 30)
        String timestamp = String.valueOf(timestamp1);

        baseDTO.setTimestamp(timestamp);
        String sign = EncryptionUtils.sign(content, timestamp, DzApplicationCommon.APPSECRET);
        baseDTO.setSign(sign);
        return baseDTO;
    }
}
